package proceso.carga.regionRiego;

import hibernate.HibernateUtil;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.StringTokenizer;

import org.hibernate.Session;

import proceso.carga.sector.CargaSector;

import modelo.regionRiego.RegionRiego;

/**
 * 
 * @author edgar
 * dada una region de riego, carga los distintos sectores y sus poligonales.
 * 
 */
public class CargaRegion {
	private RegionRiego region;
	private String razon;
	private String nombre;
	private String descripcion;
	private Calendar fechaCreacion;
	private String archivoCarga;
	private Session sess;
	
	public RegionRiego getRegion() {
		return region;
	}
	public void setRegion(RegionRiego region) {
		this.region = region;
	}
	public String getRazon() {
		return razon;
	}
	public void setRazon(String razon) {
		this.razon = razon;
	}
	
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public Calendar getFechaCreacion() {
		return fechaCreacion;
	}
	public void setFechaCreacion(Calendar fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}
	public String getArchivoCarga() {
		return archivoCarga;
	}
	public void setArchivoCarga(String archivoCarga) {
		this.archivoCarga = archivoCarga;
	}
	public Session getSess() {
		return sess;
	}
	public void setSess(Session sess) {
		this.sess = sess;
	}
	public boolean cargar(String nombreArchivo, String directorio, Session sess){
		boolean resultado;
		File arcNombre;
		FileReader lectorArc;
		BufferedReader lectorBuff;
		String linea;
		List<String> listaCarateristica = new ArrayList<String>();
		String archivoSector;
		String nombreSector;
		StringTokenizer tokens;
		boolean cargaSector;


		
		arcNombre = new File(nombreArchivo);
		try {
			lectorArc = new FileReader(arcNombre);
			lectorBuff = new BufferedReader(lectorArc);
			linea = lectorBuff.readLine();
//			System.out.println(linea);
			region = new RegionRiego();
			region.inicializarListas();
			region.setNombre(linea);
			fechaCreacion = Calendar.getInstance();
			region.setFechaCreacion(fechaCreacion);
			while(lectorBuff.ready()) {
				linea = lectorBuff.readLine();
				tokens = new StringTokenizer(linea,",");
				CargaSector cargador = new CargaSector();
				nombreSector = tokens.nextToken();
				archivoSector = directorio+"/"+tokens.nextToken();
				cargaSector = cargador.cargar(archivoSector, nombreSector, listaCarateristica);
				if(cargaSector){
					region.agregarSector(cargador.getSector());
					cargador.getSector().setRegionRiego(region);
				}
				else {
					razon = cargador.getError();
					return false;
				}
			}
			
			sess.save(region);
			for(int i = 0; i<region.getListaSector().size(); i++) {
				sess.save(region.getListaSector().get(i));

				sess.flush();
				sess.clear();
			}			

			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			razon = "Error no existe el archivo " + nombreArchivo;
			return false;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			razon = "Error de lectura en el archivo " + nombreArchivo;
		}
		
		return true;
	}
}
